/**
 * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.thinkgem.jeesite.modules.shop.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.thinkgem.jeesite.common.persistence.Page;
import com.thinkgem.jeesite.common.service.CrudService;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.shop.dao.ParameterDao;
import com.thinkgem.jeesite.modules.shop.dao.ParameterItemDao;
import com.thinkgem.jeesite.modules.shop.entity.Parameter;
import com.thinkgem.jeesite.modules.shop.entity.ParameterItem;

/**
 * 商品参数管理Service
 * @author xxs
 * @version 2016-03-03
 */
@Service
@Transactional(readOnly = true)
public class ParameterService extends CrudService<ParameterDao, Parameter> {

	@Autowired
	private ParameterDao parameterDao;
	@Autowired
	private ParameterItemDao parameterItemDao;
	
	public Parameter get(String id) {
		Parameter parameter = super.get(id);
		parameter.setParameterItemList(parameterItemDao.findList(new ParameterItem(parameter)));
		return parameter;
	}
	
	public List<Parameter> getParameterByCategoryId(String category_id) {
		return parameterDao.getParameterByCategoryId(category_id);
	}
	
	public List<Parameter> findList(Parameter parameter) {
		return super.findList(parameter);
	}
	
	public Page<Parameter> findPage(Page<Parameter> page, Parameter parameter) {
		return super.findPage(page, parameter);
	}
	
	@Transactional(readOnly = false)
	public void save(Parameter parameter) {
		super.save(parameter);
		for (ParameterItem parameterItem : parameter.getParameterItemList()){
			if (parameterItem.getId() == null){
				continue;
			}
			if (ParameterItem.DEL_FLAG_NORMAL.equals(parameterItem.getDelFlag())){
				if (StringUtils.isBlank(parameterItem.getId())){
					parameterItem.setShopParameter(parameter);
					parameterItem.preInsert();
					parameterItemDao.insert(parameterItem);
				}else{
					parameterItem.preUpdate();
					parameterItemDao.update(parameterItem);
				}
			}else{
				parameterItemDao.delete(parameterItem);
			}
		}
	}
	
	@Transactional(readOnly = false)
	public void delete(Parameter parameter) {
		super.delete(parameter);
		parameterItemDao.delete(new ParameterItem(parameter));
	}
	
}